<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
// 判断是否是对象或数组
function isObject(obj) {
    return typeof obj === 'object' && obj !== null
}                                   // 注意判断是不是null

// 深度比较
function isEqual( obj1 , obj2 ) {

    if( !isObject(obj1) || !isObject(obj2) ){
        // 值类型（注意， 参与equal的一般不会是函数）
        return obj1 === obj2
    }

    if( obj1 === obj2 ){
        return true  // 可能传入同一个变量
    }

    // 两个都是对象或数组，且不是同一个变量
    // 1.先取出 obj1 和 obj2 的keys ， 比较个数
    const obj1Keys = Object.keys(obj1)
    const obj2Keys = Object.keys(obj2)

    if( obj1Keys.length !== obj2Keys.length ){
        return false
    }

    // 2.以 obj1 为基准，和 obj2 依次递归比较
    for( let key in obj1 ){
        // 递归比较当前 key 的 val
        const res = isEqual( obj1[key] , obj2[key] )
        if( !res ){
            return false
        }   // 一旦不相等，直接 false
    }
    // 3.上面都符合，就是 true
    return true
}

const obj1 = {
    a: 100,
    b: {
        x: 100,
        y: 200
    }
}

const obj2 = {
    a: 100,
    b: {
        x: 100,
        y: 200
    }
}

console.log(`直接比较：${obj1 === obj2}`)
console.log(`深度比较：${ isEqual( obj1, obj2 ) }`)

    </script>
</body>
</html>